package com.fwx.common.security.service;

import cn.hutool.core.lang.UUID;
import com.fwx.common.core.domain.constants.CacheConstants;
import com.fwx.common.core.domain.constants.JwtConstants;
import com.fwx.common.redis.service.RedisService;
import com.fwx.common.security.domain.LoginUser;
import com.fwx.common.security.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

//操作用户登录token
//c端 管理端
@Service
public class TokenService {

    @Autowired
    private RedisService redisService;

    public String createToken(Long userId,String secret,Integer identity) {
        /*用户登录成功，生成JWT令牌*/
        Map<String,Object> claims = new HashMap<>();
        String userKey = UUID.randomUUID().toString();
        claims.put(JwtConstants.LOGIN_USER_ID,userId);
        claims.put(JwtConstants.LOGIN_USER_key,userKey);
        String token = JwtUtils.createToken(claims, secret);

        //第三方机制存储敏感信息   Redis表名用户身份的字段 identity 1表示普通用户 2表示管理员用户

        //使用Redis数据结构存储 key value String list zset set
        //key保证唯一性 logintoken:userId
        //自增 管理员 C端用户

        String key = CacheConstants.LOGIN_TOKEN_KEY +userKey;
        LoginUser loginUser = new LoginUser();
        loginUser.setIdentity(identity);
        //注册时间 2-3小时(比竞赛时间长)
        redisService.setCacheObject(key,loginUser,CacheConstants.EXP, TimeUnit.MINUTES);
        return  token;
    }
}
